package com.xy.iot.netty.handle;

import io.netty.handler.codec.LengthFieldBasedFrameDecoder;

import java.nio.ByteOrder;

public class BasedFrameDecoder extends LengthFieldBasedFrameDecoder {

    /**
     * 案例网址：
     *          https://cloud.tencent.com/developer/article/2014861
     * ByteOrder byteOrder:
     *                  解释: 指定长度字段的字节序。
     *                  ByteOrder 是枚举类型，包括 BIG_ENDIAN (大端序) 和 LITTLE_ENDIAN (小端序)。
     *                  这决定了如何解析长度字段中的字节来得到实际长度值。
     * int maxFrameLength:
     *                  解释: 表示单个数据帧的最大长度。解码器会拒绝任何超过这个长度的帧，防止恶意构造的巨大帧导致的内存溢出。
     * int lengthFieldOffset:
     *                  解释: 长度字段在每个消息中的偏移量，即从消息的起始处到长度字段的起始处有多少个字节。这个值是基于协议定义的。
     * int lengthFieldLength:
     *                  解释: 长度字段所占用的字节数。根据协议设计，长度字段可以是1、2、4或更多字节。
     * int lengthAdjustment:
     *                  解释: 解码后实际数据的偏移量调整值。通常用于当长度字段表示的是数据负载的长度，但解码器需要跳过额外的头部信息时。正值表示在长度字段指示的值基础上向后跳过相应字节数，负值则表示数据开始于长度字段之前。
     * int initialBytesToStrip:
     *                  解释: 在成功解码并确定了实际消息体长度后，从解码后的字节缓冲区中应去除的字节数。这通常包括长度字段本身和可能的一些附加头部信息。
     * boolean failFast:
     *                  解释: 当设置为 true 时，如果在没有足够的字节来判断长度字段时，解码器会立即失败并抛出异常。当设为 false，解码器会等待更多的数据到来再尝试解码。这个选项影响了对不完整数据包的处理策略。
     */
    public BasedFrameDecoder(){
        super(
                ByteOrder.LITTLE_ENDIAN,
                Integer.MAX_VALUE,
                0,
                3,
                2,
                1,
                true
        );
    }
}
